# -*- coding: utf-8 -*-
'''

这是测试多线程的例子，在多线程下，10个ip只要有1个通就全都通
原因是：
ping模块不支持多线程
在同一个进程中用到了os.getpid()

研究一下icmp的封包

'''
import time,ping
from threading import Thread
import thread
from Queue import Queue

psize = 64
timeout=2
nds=(('19.168.20.87',), ('192.168.20.86',), ('172.17.144.9',), ('172.17.144.8',), ('172.17.144.7',), ('172.17.144.6',), ('172.17.144.5',), ('172.17.144.4',), ('172.17.144.3',), ('172.17.144.2',))

#q是任务队列
#NUM是并发线程总数
q = Queue()
NUM = 10
#具体的处理函数，负责处理单个任务
def do_somthing_using(arguments):
	bAlive=ping.do_one(arguments[0],2,64)
	# print thread.get_ident() 
	if bAlive!=None:
		print arguments[0],"ok"
	else:
		print arguments[0],"timeout"
	
#这个是工作进程，负责不断从队列取数据并处理
def working():
	while True:
		arguments = q.get()
		do_somthing_using(arguments)
		q.task_done()
#fork NUM个线程等待队列
for i in range(NUM):
	t = Thread(target=working)
	t.setDaemon(True)
	t.start()
#把JOBS排入队列
for i in nds:
	q.put(i)
#等待所有JOBS完成
q.join()
print "all jobs have done"
